package ynu.edu.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import ynu.edu.entity.OrderEntity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 订单传输对象，包含订单详情和关联的商品列表
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrderDTO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 订单ID
     */
    private Integer orderId;
    
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 商家ID
     */
    private Integer businessId;
    
    /**
     * 商家名称
     */
    private String businessName;
    
    /**
     * 订单日期
     */
    private LocalDateTime orderDate;
    
    /**
     * 订单总金额
     */
    private BigDecimal orderTotal;
    
    /**
     * 订单状态：0-待支付，1-已取消，2-已支付，3-配送中，4-已完成
     */
    private Integer orderState;
    
    /**
     * 订单状态名称
     */
    private String orderStateName;
    
    /**
     * 送货地址ID
     */
    private Integer daId;
    
    /**
     * 配送地址信息
     */
    private String address;
    
    /**
     * 订单项列表
     */
    private List<OrderItemDTO> orderItems;
    
    /**
     * 嵌套结构 - 订单对象
     */
    private OrderEntity order;
    
    /**
     * 嵌套结构 - 商家信息
     */
    private Map<String, Object> merchant;
    
    /**
     * 嵌套结构 - 地址信息
     */
    private Map<String, Object> addressInfo;
    
    /**
     * 嵌套结构 - 订单明细
     */
    private List<Map<String, Object>> orderDetails;
    
    /**
     * 嵌套结构 - 食品信息映射
     */
    private Map<Integer, Map<String, Object>> foodMap;
    
    /**
     * 获取订单状态名称
     */
    public String getOrderStateName() {
        if (orderState == null) return "未知";
        
        switch (orderState) {
            case 0:
                return "待支付";
            case 1:
                return "已取消";
            case 2:
                return "已支付";
            case 3:
                return "配送中";
            case 4:
                return "已完成";
            default:
                return "未知";
        }
    }
} 